// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/kpdus/jad.html
// Decompiler options: braces fieldsfirst space lnc
package com.google.zxing.oned.rss.expanded;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.NotFoundException;
import com.google.zxing.Result;
import com.google.zxing.ResultPoint;
import com.google.zxing.common.BitArray;
import com.google.zxing.oned.rss.AbstractRSSReader;
import com.google.zxing.oned.rss.DataCharacter;
import com.google.zxing.oned.rss.FinderPattern;
import com.google.zxing.oned.rss.RSSUtils;
import com.google.zxing.oned.rss.expanded.decoders.AbstractExpandedDecoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
// Referenced classes of package com.google.zxing.oned.rss.expanded:
// a, b
public final class RSSExpandedReader extends AbstractRSSReader
{
private static final int a[] = {
7, 5, 4, 3, 1
};
private static final int b[] = {
4, 20, 52, 104, 204
};
private static final int c[] = {
0, 348, 1388, 2948, 3988
};
private static final int d[][] = {
{
1, 8, 4, 1
}, {
3, 6, 4, 1
}, {
3, 4, 6, 1
}, {
3, 2, 8, 1
}, {
2, 6, 5, 1
}, {
2, 2, 9, 1
}
};
private static final int e[][] = {
{
1, 3, 9, 27, 81, 32, 96, 77
}, {
20, 60, 180, 118, 143, 7, 21, 63
}, {
189, 145, 13, 39, 117, 140, 209, 205
}, {
193, 157, 49, 147, 19, 57, 171, 91
}, {
62, 186, 136, 197, 169, 85, 44, 132
}, {
185, 133, 188, 142, 4, 12, 36, 108
}, {
113, 128, 173, 97, 80, 29, 87, 50
}, {
150, 28, 84, 41, 123, 158, 52, 156
}, {
46, 138, 203, 187, 139, 206, 196, 166
}, {
76, 17, 51, 153, 37, 111, 122, 155
}, {
43, 129, 176, 106, 107, 110, 119, 146
}, {
16, 48, 144, 10, 30, 90, 59, 177
}, {
109, 116, 137, 200, 178, 112, 125, 164
}, {
70, 210, 208, 202, 184, 130, 179, 115
}, {
134, 191, 151, 31, 93, 68, 204, 190
}, {
148, 22, 66, 198, 172, 94, 71, 2
}, {
6, 18, 54, 162, 64, 192, 154, 40
}, {
120, 149, 25, 75, 14, 42, 126, 167
}, {
79, 26, 78, 23, 69, 207, 199, 175
}, {
103, 98, 83, 38, 114, 131, 182, 124
}, {
161, 61, 183, 127, 170, 88, 53, 159
}, {
55, 165, 73, 8, 24, 72, 5, 15
}, {
45, 135, 194, 160, 58, 174, 100, 89
}
};
private static final int f = 0;
private static final int g = 1;
private static final int h = 2;
private static final int i = 3;
private static final int j = 4;
private static final int k = 5;
private static final int l[][] = {
{
0, 0
}, {
0, 1, 1
}, {
0, 2, 1, 3
}, {
0, 4, 1, 3, 2
}, {
0, 4, 1, 3, 3, 5
}, {
0, 4, 1, 3, 4, 5, 5
}, {
0, 0, 1, 1, 2, 2, 3, 3
}, {
0, 0, 1, 1, 2, 2, 3, 4, 4
}, {
0, 0, 1, 1, 2, 2, 3, 4, 5, 5
}, {
0, 0, 1, 1, 2, 3, 3, 4, 4, 5,
5
}
};
private static final int m = 0;
private static final int n = 11;
private final List o = new ArrayList(11);
private final int p[] = new int[2];
private final int q[];
public RSSExpandedReader()
{
q = new int[m];
}
private static int a(BitArray bitarray, int i1)
{
if (bitarray.get(i1))
{
return bitarray.getNextSet(bitarray.getNextUnset(i1));
} else
{
return bitarray.getNextUnset(bitarray.getNextSet(i1));
}
}
private static Result a(List list)
{
String s = AbstractExpandedDecoder.createDecoder(com.google.zxing.oned.rss.expanded.a.a(list)).parseInformation();
ResultPoint aresultpoint[] = ((b)list.get(0)).d().getResultPoints();
ResultPoint aresultpoint1[] = ((b)list.get(-1 + list.size())).d().getResultPoints();
ResultPoint aresultpoint2[] = new ResultPoint[4];
aresultpoint2[0] = aresultpoint[0];
aresultpoint2[1] = aresultpoint[1];
aresultpoint2[2] = aresultpoint1[0];
aresultpoint2[3] = aresultpoint1[1];
return new Result(s, null, aresultpoint2, BarcodeFormat.RSS_EXPANDED);
}
private FinderPattern a(BitArray bitarray, int i1, boolean flag)
{
int j1;
int k1;
int l1;
int ai[];
int i2;
if (flag)
{
int j2;
for (j2 = -1 + p[0]; j2 >= 0 && !bitarray.get(j2); j2--) { }
j1 = j2 + 1;
l1 = p[0] - j1;
k1 = p[1];
} else
{
j1 = p[0];
k1 = bitarray.getNextUnset(1 + p[1]);
l1 = k1 - p[1];
}
ai = getDecodeFinderCounters();
System.arraycopy(ai, 0, ai, 1, -1 + ai.length);
ai[0] = l1;
try
{
i2 = parseFinderValue(ai, d);
}
catch (NotFoundException notfoundexception)
{
return null;
}
return new FinderPattern(i2, new int[] {
j1, k1
}, j1, k1, i1);
}
private void a(int i1)
{
int j1 = 1;
int k1 = count(getOddCounts());
int l1 = count(getEvenCounts());
int i2 = (k1 + l1) - i1;
int j2;
int k2;
int l2;
int i3;
int j3;
int k3;
if ((k1 & 1) == j1)
{
j2 = j1;
} else
{
j2 = 0;
}
if ((l1 & 1) == 0)
{
k2 = j1;
} else
{
k2 = 0;
}
int l3;
int i4;
if (k1 > 13)
{
l2 = j1;
i3 = 0;
} else
if (k1 < 4)
{
i3 = j1;
l2 = 0;
} else
{
l2 = 0;
i3 = 0;
}
if (l1 > 13)
{
k3 = 0;
j3 = j1;
} else
if (l1 < 4)
{
k3 = j1;
j3 = 0;
} else
{
j3 = 0;
k3 = 0;
}
if (i2 == j1)
{
if (j2 != 0)
{
if (k2 != 0)
{
throw NotFoundException.getNotFoundInstance();
}
i4 = i3;
int l4 = j1;
j1 = k3;
l3 = l4;
} else
{
if (k2 == 0)
{
throw NotFoundException.getNotFoundInstance();
}
j3 = j1;
j1 = k3;
l3 = l2;
i4 = i3;
}
break MISSING_BLOCK_LABEL_147;
}
if (i2 == -1)
{
if (j2 != 0)
{
if (k2 != 0)
{
throw NotFoundException.getNotFoundInstance();
}
int k4 = k3;
l3 = l2;
i4 = j1;
j1 = k4;
} else
{
if (k2 == 0)
{
throw NotFoundException.getNotFoundInstance();
}
l3 = l2;
i4 = i3;
}
continue; /* Loop/switch isn't completed */
}
if (i2 == 0)
{
if (j2 != 0)
{
if (k2 == 0)
{
throw NotFoundException.getNotFoundInstance();
}
if (k1 < l1)
{
j3 = j1;
int j4 = k3;
l3 = l2;
i4 = j1;
j1 = j4;
} else
{
l3 = j1;
i4 = i3;
}
continue; /* Loop/switch isn't completed */
}
if (k2 != 0)
{
throw NotFoundException.getNotFoundInstance();
}
} else
{
throw NotFoundException.getNotFoundInstance();
}
j1 = k3;
l3 = l2;
i4 = i3;
goto _L1
_L3:
if (i4 != 0)
{
if (l3 != 0)
{
throw NotFoundException.getNotFoundInstance();
}
increment(getOddCounts(), getOddRoundingErrors());
}
if (l3 != 0)
{
decrement(getOddCounts(), getOddRoundingErrors());
}
if (j1 != 0)
{
if (j3 != 0)
{
throw NotFoundException.getNotFoundInstance();
}
increment(getEvenCounts(), getOddRoundingErrors());
}
if (j3 != 0)
{
decrement(getEvenCounts(), getEvenRoundingErrors());
}
return;
_L1:
if (true) goto _L3; else goto _L2
_L2:
}
private static void a(int ai[])
{
int i1 = ai.length;
for (int j1 = 0; j1 < i1 / 2; j1++)
{
int k1 = ai[j1];
ai[j1] = ai[-1 + (i1 - j1)];
ai[-1 + (i1 - j1)] = k1;
}
}
private boolean a()
{
b b1 = (b)o.get(0);
DataCharacter datacharacter = b1.b();
int i1 = b1.c().getChecksumPortion();
int j1 = 2;
int k1 = i1;
for (int l1 = 1; l1 < o.size(); l1++)
{
b b2 = (b)o.get(l1);
k1 += b2.b().getChecksumPortion();
j1++;
DataCharacter datacharacter1 = b2.c();
if (datacharacter1 != null)
{
k1 += datacharacter1.getChecksumPortion();
j1++;
}
}
return k1 % 211 + 211 * (j1 - 4) == datacharacter.getValue();
}
private static boolean a(FinderPattern finderpattern, boolean flag, boolean flag1)
{
return finderpattern.getValue() != 0 || !flag || !flag1;
}
private boolean a(List list, FinderPattern finderpattern)
{
int i1;
int ai[][];
int k1;
int l1;
i1 = 1 + list.size();
if (i1 > q.length)
{
throw NotFoundException.getNotFoundInstance();
}
for (int j1 = 0; j1 < list.size(); j1++)
{
q[j1] = ((b)list.get(j1)).d().getValue();
}
q[i1 - 1] = finderpattern.getValue();
ai = l;
k1 = ai.length;
l1 = 0;
_L6:
if (l1 >= k1) goto _L2; else goto _L1
_L1:
int ai1[];
int i2;
ai1 = ai[l1];
if (ai1.length < i1)
{
continue; /* Loop/switch isn't completed */
}
i2 = 0;
_L5:
if (i2 >= i1)
{
break MISSING_BLOCK_LABEL_180;
}
if (q[i2] == ai1[i2]) goto _L4; else goto _L3
_L3:
boolean flag = false;
_L7:
if (!flag)
{
continue; /* Loop/switch isn't completed */
}
int j2 = ai1.length;
boolean flag1 = false;
if (i1 == j2)
{
flag1 = true;
}
return flag1;
_L4:
i2++;
goto _L5
l1++;
goto _L6
_L2:
throw NotFoundException.getNotFoundInstance();
flag = true;
goto _L7
}
private void b(BitArray bitarray, List list, int i1)
{
int ai[] = getDecodeFinderCounters();
ai[0] = 0;
ai[1] = 0;
ai[2] = 0;
ai[3] = 0;
int j1 = bitarray.getSize();
boolean flag;
boolean flag1;
int k1;
if (i1 < 0)
{
if (list.isEmpty())
{
i1 = 0;
} else
{
i1 = ((b)list.get(-1 + list.size())).d().getStartEnd()[1];
}
}
if (list.size() % 2 != 0)
{
flag = true;
} else
{
flag = false;
}
flag1 = false;
k1 = i1;
do
{
label0:
{
label1:
{
int l1;
int j2;
boolean flag2;
int k2;
if (k1 < j1)
{
int i2;
if (!bitarray.get(k1))
{
flag1 = true;
} else
{
flag1 = false;
}
if (flag1)
{
break label1;
}
}
l1 = k1;
i2 = k1;
j2 = 0;
flag2 = flag1;
k2 = i2;
while (l1 < j1)
{
if (flag2 ^ bitarray.get(l1))
{
ai[j2] = 1 + ai[j2];
} else
{
if (j2 == 3)
{
if (flag)
{
a(ai);
}
if (isFinderPattern(ai))
{
p[0] = k2;
p[1] = l1;
return;
}
if (flag)
{
a(ai);
}
k2 += ai[0] + ai[1];
ai[0] = ai[2];
ai[1] = ai[3];
ai[2] = 0;
ai[3] = 0;
j2--;
} else
{
j2++;
}
ai[j2] = 1;
if (!flag2)
{
flag2 = true;
} else
{
flag2 = false;
}
}
l1++;
}
break label0;
}
k1++;
continue;
}
throw NotFoundException.getNotFoundInstance();
} while (true);
}
DataCharacter a(BitArray bitarray, FinderPattern finderpattern, boolean flag, boolean flag1)
{
int ai[] = getDataCharacterCounters();
ai[0] = 0;
ai[1] = 0;
ai[2] = 0;
ai[3] = 0;
ai[4] = 0;
ai[5] = 0;
ai[6] = 0;
ai[7] = 0;
float f1;
int ai1[];
int ai2[];
float af[];
float af1[];
int l1;
if (flag1)
{
recordPatternInReverse(bitarray, finderpattern.getStartEnd()[0], ai);
} else
{
recordPattern(bitarray, 1 + finderpattern.getStartEnd()[1], ai);
int i1 = 0;
int j1 = -1 + ai.length;
while (i1 < j1)
{
int k1 = ai[i1];
ai[i1] = ai[j1];
ai[j1] = k1;
i1++;
j1--;
}
}
f1 = (float)count(ai) / (float)17;
ai1 = getOddCounts();
ai2 = getEvenCounts();
af = getOddRoundingErrors();
af1 = getEvenRoundingErrors();
l1 = 0;
do
{
if (l1 >= ai.length)
{
break;
}
float f2 = (1.0F * (float)ai[l1]) / f1;
int j7 = (int)(0.5F + f2);
int k7;
if (j7 < 1)
{
j7 = 1;
} else
if (j7 > 8)
{
j7 = 8;
}
k7 = l1 >> 1;
if ((l1 & 1) == 0)
{
ai1[k7] = j7;
af[k7] = f2 - (float)j7;
} else
{
ai2[k7] = j7;
af1[k7] = f2 - (float)j7;
}
l1++;
} while (true);
a(17);
int i2 = 4 * finderpattern.getValue();
int j2;
int k2;
int l2;
int i3;
int j3;
int k3;
int l3;
int i4;
if (flag)
{
j2 = 0;
} else
{
j2 = 2;
}
k2 = i2 + j2;
if (flag1)
{
l2 = 0;
} else
{
l2 = 1;
}
i3 = -1 + (l2 + k2);
j3 = -1 + ai1.length;
k3 = 0;
l3 = j3;
i4 = 0;
while (l3 >= 0)
{
if (a(finderpattern, flag, flag1))
{
i4 += e[i3][l3 * 2] * ai1[l3];
}
int i7 = k3 + ai1[l3];
l3--;
k3 = i7;
}
int j4 = -1 + ai2.length;
int k4 = 0;
int l4 = 0;
for (int i5 = j4; i5 >= 0; i5--)
{
if (a(finderpattern, flag, flag1))
{
k4 += e[i3][1 + i5 * 2] * ai2[i5];
}
l4 += ai2[i5];
}
int j5 = i4 + k4;
if ((k3 & 1) != 0 || k3 > 13 || k3 < 4)
{
throw NotFoundException.getNotFoundInstance();
} else
{
int k5 = (13 - k3) / 2;
int l5 = a[k5];
int i6 = 9 - l5;
int j6 = RSSUtils.getRSSvalue(ai1, l5, true);
int k6 = RSSUtils.getRSSvalue(ai2, i6, false);
int l6 = b[k5];
return new DataCharacter(c[k5] + (k6 + j6 * l6), j5);
}
}
b a(BitArray bitarray, List list, int i1)
{
boolean flag2;
DataCharacter datacharacter1;
boolean flag;
int j1;
boolean flag1;
if (list.size() % 2 == 0)
{
flag = true;
} else
{
flag = false;
}
j1 = -1;
flag1 = true;
do
{
b(bitarray, list, j1);
FinderPattern finderpattern = a(bitarray, i1, flag);
DataCharacter datacharacter;
DataCharacter datacharacter2;
if (finderpattern == null)
{
j1 = a(bitarray, p[0]);
} else
{
flag1 = false;
}
} while (flag1);
flag2 = a(list, finderpattern);
datacharacter = a(bitarray, finderpattern, flag, true);
datacharacter2 = a(bitarray, finderpattern, flag, false);
datacharacter1 = datacharacter2;
_L2:
return new b(datacharacter, datacharacter1, finderpattern, flag2);
NotFoundException notfoundexception;
notfoundexception;
if (flag2)
{
datacharacter1 = null;
} else
{
throw notfoundexception;
}
if (true) goto _L2; else goto _L1
_L1:
}
List a(int i1, BitArray bitarray)
{
b b1;
do
{
do
{
b1 = a(bitarray, o, i1);
o.add(b1);
} while (!b1.a());
if (a())
{
return o;
}
} while (!b1.e());
throw NotFoundException.getNotFoundInstance();
}
public Result decodeRow(int i1, BitArray bitarray, Map map)
{
reset();
a(i1, bitarray);
return a(o);
}
public void reset()
{
o.clear();
}
static
{
m = l[-1 + l.length].length;
}
}